package com.wnxy.pawnbackgroundsystem.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wnxy.pawnbackgroundsystem.dto.GetBigSortsDto;
import com.wnxy.pawnbackgroundsystem.dto.SortDto;
import com.wnxy.pawnbackgroundsystem.dto.SortPageDto;
import com.wnxy.pawnbackgroundsystem.dto.userDto.GoodsSmallSortDto;
import com.wnxy.pawnbackgroundsystem.entity.ShopDefine;
import com.wnxy.pawnbackgroundsystem.entity.Sort;
import com.wnxy.pawnbackgroundsystem.dao.SortMapper;
import com.wnxy.pawnbackgroundsystem.param.*;
import com.wnxy.pawnbackgroundsystem.service.IShopDefineService;
import com.wnxy.pawnbackgroundsystem.service.ISortService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 商品分类表 服务实现类
 * </p>
 *
 * @author Lucas
 * @since 2021-10-14
 */
@Service
public class SortServiceImpl extends ServiceImpl<SortMapper, Sort> implements ISortService {
    @Autowired
    private IShopDefineService iShopDefineService;
    //开始大类
    //分页带条件查询大类
    public SortPageDto getBigSort(GetBigSortParam getBigSortParam){

        QueryWrapper<Sort> qw = new QueryWrapper<>();
        qw.orderByDesc("sort_id");

        qw.eq("sort_grade","一级");

        if(null==getBigSortParam.getPageParam().getIndexPage()){
            List<Sort> sorts = this.list(qw);
            ArrayList<SortDto> sortDtos = new ArrayList<>();
            for(Sort ss:sorts){
                SortDto sortDto = new SortDto();
                BeanUtils.copyProperties(ss,sortDto);
                sortDtos.add(sortDto);
            }
            SortPageDto sortPageDto = new SortPageDto();
            sortPageDto.setLs(sortDtos);
            return sortPageDto;
        }else {
            if(null!=getBigSortParam.getSortName()){
                qw.like("sort_name",getBigSortParam.getSortName());
            }
            System.out.println("********");
            System.out.println(getBigSortParam.getPageParam());
            Page<Sort> page = this.page(new Page<>(getBigSortParam.getPageParam().getIndexPage(), getBigSortParam.getPageParam().getSize()), qw);
            ArrayList<SortDto> sortDtos = new ArrayList<>();
            for(Sort ss:page.getRecords()){
                SortDto sortDto = new SortDto();
                BeanUtils.copyProperties(ss,sortDto);
                sortDtos.add(sortDto);
            }
            SortPageDto sortPageDto = new SortPageDto();
            sortPageDto.setLs(sortDtos);
            sortPageDto.setIndexPage(page.getCurrent());
            sortPageDto.setMaxPage(page.getPages());
            sortPageDto.setTotle(page.getTotal());


            return sortPageDto;
        }


    }
    //查询大类返回主键和大类名称
    public List<GetBigSortsDto> getBigSorts(){
        List<Sort> sorts = this.list(new QueryWrapper<Sort>().eq("sort_grade","一级"));
        ArrayList<GetBigSortsDto> getBigSortsDtos = new ArrayList<>();
        for(Sort so:sorts){
            GetBigSortsDto getBigSortsDto = new GetBigSortsDto();
            getBigSortsDto.setKey(so.getSortId());
            getBigSortsDto.setLabel(so.getSortName());
            getBigSortsDtos.add(getBigSortsDto);
        }
        return getBigSortsDtos;
    }
    //修改大小类
    public void updateBigSort(UpdateBigSortParam updateBigSortParam){
        Sort sort = new Sort();
        BeanUtils.copyProperties(updateBigSortParam,sort);
        this.saveOrUpdate(sort);
        for(ShopDefine sd:updateBigSortParam.getDefines()){
            sd.setSortId(sort.getSortId());
            iShopDefineService.saveOrUpdate(sd);
        }


    }
    //删除多个大类
    public void delBigSort(List<Integer> intList){

        this.removeByIds(intList);

        for(Integer ii:intList){
            this.remove(new UpdateWrapper<Sort>().eq("shopping_id",ii));
        }


    }
    //新增大小类
    public void addBigSort(AddBigSortParam addBigSortParam){
            Sort sort = new Sort();
            BeanUtils.copyProperties(addBigSortParam,sort);
            this.saveOrUpdate(sort);
            for(ShopDefine sd:addBigSortParam.getDefines()){
                sd.setSortId(sort.getSortId());
                iShopDefineService.saveOrUpdate(sd);
            }
    }
    //开始小类
    //分页带条件查询小类
    public SortPageDto getSmallSort(GetSmallSortParam getSmallSortParam){

        QueryWrapper<Sort> qw = new QueryWrapper<>();
        qw.orderByDesc("sort_id");

        qw.eq("sort_grade","二级");

        if(null!=getSmallSortParam.getSortId()){
            qw.eq("shopping_id",getSmallSortParam.getSortId());
        }
        if(null!=getSmallSortParam.getSortName()){
            qw.like("sort_name",getSmallSortParam.getSortName());
        }

        Page<Sort> page = this.page(new Page<>(getSmallSortParam.getPageParam().getIndexPage(), getSmallSortParam.getPageParam().getSize()), qw);
        ArrayList<SortDto> sortDtos = new ArrayList<SortDto>();
        for(Sort ss:page.getRecords()){
            SortDto sortDto = new SortDto();
            BeanUtils.copyProperties(ss,sortDto);
            sortDtos.add(sortDto);
        }

        SortPageDto sortPageDto = new SortPageDto();
        sortPageDto.setLs(sortDtos);
        sortPageDto.setIndexPage(page.getCurrent());
        sortPageDto.setMaxPage(page.getPages());
        sortPageDto.setTotle(page.getTotal());

        return sortPageDto;
    }
    //删除多个小类
    public void delSmallSort(List<Integer> intList){

        this.removeByIds(intList);

    }

    //新增小类
    public void addSmallSort(AddSmallSortParam addSmallSortParam){
        Sort sort = new Sort();
        sort.setSortGrade("二级");
        BeanUtils.copyProperties(addSmallSortParam,sort);
        this.saveOrUpdate(sort);

    }

    //开始小类下级
    //分页带条件查询小类下级
    public SortPageDto getSmallJunior(GetSmallJuniorParam getSmallJuniorParam){

        QueryWrapper<Sort> qw = new QueryWrapper<>();
        qw.eq("sort_grade","三级");
        qw.eq("shopping_id",getSmallJuniorParam.getSortId());

        if(null!=getSmallJuniorParam.getSortName()){
            qw.like("sort_name",getSmallJuniorParam.getSortName());
        }

        Page<Sort> page = this.page(new Page<>(getSmallJuniorParam.getPageParam().getIndexPage(), getSmallJuniorParam.getPageParam().getSize()), qw);
        ArrayList<SortDto> sortDtos = new ArrayList<SortDto>();
        for(Sort ss:page.getRecords()){
            SortDto sortDto = new SortDto();
            BeanUtils.copyProperties(ss,sortDto);
            sortDtos.add(sortDto);
        }

        SortPageDto sortPageDto = new SortPageDto();
        sortPageDto.setLs(sortDtos);
        sortPageDto.setIndexPage(page.getCurrent());
        sortPageDto.setMaxPage(page.getPages());
        sortPageDto.setTotle(page.getTotal());

        return sortPageDto;
    }
    //删除多个小类下级
    public void delSmallJunior(List<Integer> intList){
        this.removeByIds(intList);
    }
    //新增小类下级组
    public void addSmallJunior(AddJuniorParam juniorParam){
        for(AddSmallJuniorParam as:juniorParam.getJunior()){
            Sort sort = new Sort();
            BeanUtils.copyProperties(as,sort);
            this.saveOrUpdate(sort);
        }

    }
    //新增修改单个下级
    public void smallJunior(AddSmallJuniorParam addSmallJuniorParam){
        Sort sort = new Sort();
        BeanUtils.copyProperties(addSmallJuniorParam,sort);
        this.saveOrUpdate(sort);
    }
    //商品查询小类
    public List<GoodsSmallSortDto> getGoodsSmall(){

        List<Sort> sorts = this.list(new QueryWrapper<Sort>().eq("sort_grade", "二级"));
        ArrayList<GoodsSmallSortDto> gmsDto = new ArrayList<>();
        for(Sort ss:sorts){
            GoodsSmallSortDto goodsSmallSortDto = new GoodsSmallSortDto();
            BeanUtils.copyProperties(ss,goodsSmallSortDto);
            gmsDto.add(goodsSmallSortDto);
        }

        return gmsDto;
    }

}
